if isinstance(v, defer.Deferred):
dlist.append(v)
+def dlist_err(val):
+ """Error callback suitable for a deferred list.
+ In a deferred list the error callback is called with with Failure((error, index)).
+ This callback extracts the error and returns it.
+
+ @param val: Failure containing (error, index)
+ @type val: twisted.internet.failure.Failure
+ """
+
+ (error, index) = val.value
+ return error
+
class XendDomainInfo:
"""Virtual machine object."""
append_deferred(dlist, v)
index[dev_name] = dev_index + 1
deferred = defer.DeferredList(dlist, fireOnOneErrback=1)
+ deferred.addErrback(dlist_err)
return deferred
def device_create(self, dev_config):
log.warning("Unknown config field %s", field_name)
index[field_name] = field_index + 1
d = defer.DeferredList(dlist, fireOnOneErrback=1)
+ deferred.addErrback(dlist_err)
return d
from twisted.protocols import http
from twisted.web import error
+from twisted.python.failure import Failure
from xen.xend import sxp
from xen.xend import XendDomain
def _op_create_err(self, err, req):
"""Callback to handle errors in deferred domain creation.
"""
+ if isinstance(err, Failure):
+ err = err.getErrorMessage()
print 'op_create> Deferred Exception creating domain:', err
req.setResponseCode(http.BAD_REQUEST, "Error creating domain: " + str(err))
return str(err)
return val
def _op_restore_err(self, err, req):
+ if isinstance(err, Failure):
+ err = err.getErrorMessage()
print 'op_create> Deferred Exception restoring domain:', err
req.setResponseCode(http.BAD_REQUEST, "Error restoring domain: "+ str(err))
return str(err)